package com.blade.gongzuo.algorithm;

import org.apache.commons.lang3.ArrayUtils;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * 给一个数组A，判断A数组里是否存任意两个数相加等于一个给定的数sum
 */
public class ArrayToSum {
	/**
	 * 工具类判断数组是否存在某个数的方式
	 * sum 减去 array 的遍历元素得到的差，在数组中用查找方法查看是否包含这个差，包含就说明该数组可以
	 */
	public static Boolean findArray1(Integer[] array, Integer sum) {
		for (Integer num : array) {
			if (ArrayUtils.contains(array, sum - num)) {
				return true;
			}
		}

		return false;
	}

	/**
	 * 数组查找方式，用Set集合去重，再查找
	 * sum 减去 array 的遍历元素得到的差，在数组中用查找方法查看是否包含这个差，包含就说明该数组可以
	 */
	public static Boolean findArray2(Integer[] array, Integer sum) {
		Set<Integer> set = new HashSet(Arrays.asList(array));

		for (Integer num : set) {
			if (set.contains(sum - num)) {
				return true;
			}
		}

		return false;
	}

	public static void main(String[] str) {
		Integer[] array = new Integer[] {11,3,2,6,66,4,33,22,6,4,9};

		Integer sum = 8;
		Integer sum2 = 45;


		System.out.println(findArray1(array, sum));
		System.out.println(findArray1(array, sum2));
		System.out.println("=============");


		System.out.println(findArray2(array, sum));
		System.out.println(findArray2(array, sum2));
		System.out.println("=============");
	}
}